<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
	/**
	 * Объект конфигурации
	 *
	 * @var Zend_Config
	 */
	private $_config = null;
	
	public function run()
	{
		$this->setConfig();
		
		// init autoload path
		$this->setAutoloadPath();
		
		$this->setView();
		
		// Подключение к базе данных
		$this->setDbAdapter();
		
		// Подключение маршрутизации
		$router = $this->setRouter();
		
		$this->_request = new Zend_Controller_Request_Http();
		if ($this->_request->isXmlHttpRequest()) {
			 //если AJAX - отключаем авторендеринг шаблонов
			 $this->_layout->disableLayout();
		}
		
		require_once APPLICATION_PATH.'/core/ErrorsCodes.php';
           
		parent::run();
	}

	/**
	 * Настройка конфигурации
	 * 
	 * @param array $config Настройки
	 */
	public function setConfig()
	{
		 $config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini', 'staging');
		 $this->_config = $config;
		 Zend_Registry::set('config', $config);
	} 
	
	/**
	 * Установка соединения с базой данных и помещение его объекта в реестр.
	 */
	public function setDbAdapter() 
	{
		 // Подключение к БД, так как Zend_Db "понимает" Zend_Config, 
		 // нам достаточно передать специально сформированный объект конфигурации в метод factory
		//echo '<xmp>'.print_r($this->_config->database, 1).'</xmp>'; exit;
		 $db = Zend_Db::factory($this->_config->database);

		 // Задание адаптера по умолчанию для наследников класса Zend_Db_Table_Abstract
		 Zend_Db_Table_Abstract::setDefaultAdapter($db);
		 // Занесение объекта соединения c БД в реестр
		 Zend_Registry::set('db', $db);
	}
	
	private function setAutoloadPath()
	{
		$loader = new Zend_Loader_Autoloader_Resource(array(
	        'basePath'  => APPLICATION_PATH.'/core',
	        'namespace' => 'Core',
	    ));
	   $loader->addResourceType('controller', 'controllers', 'Controller');
	   $loader->addResourceType('common', '', 'Common');
	   $loader->addResourceType('model', 'models', 'Model');
		$loader->addResourceType('form', 'forms', 'Form');
	   $loader->addResourceType('form_element', 'forms/elements', 'Form_Element');
	   $loader->addResourceType('view', 'views/helper', 'View_Helper');
	}
	
	protected function setView()
	{
		// получаем ресурс слоя
		$this->bootstrap('layout');
		$layout = $this->getResource('layout');
		$this->_layout = $layout;
		$view = $layout->getView();
		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');

		// добавляем поддежрку jQuery
		$viewRenderer->view->addHelperPath(APPLICATION_PATH . "/views/helpers", 'My_Helper');
		$view->addHelperPath('ZendX/JQuery/View/Helper', 'ZendX_JQuery_View_Helper');
		
		$viewRenderer->view->addHelperPath(APPLICATION_PATH . "/core/views/helper", 'Core_View_Helper');

		// задаем локальные пути для скриптов и стилей
		ZendX_JQuery::enableView($view);
		$view->jQuery()
				  ->enable()
				  ->uiEnable()
				  ->setLocalPath('/js/jquery-1.6.2.min.js')
				  ->setUiLocalPath('/js/jquery-ui-1.8.16.custom.min.js')
				  ->addStylesheet('/css/smoothness/jquery-ui-1.8.16.custom.css');

		// инициализация doctype
		$view->doctype('XHTML1_STRICT');

		// настройка title
		$view->headTitle()->setSeparator(' - ')->headTitle('ZF 4 fun');
	}
	
	public function setRouter() 
	{
		 // Подключение файла правил маршрутизации
		 require(APPLICATION_PATH . '/routes.php');
		 // Если переменная router не является объектом Zend_Controller_Router_Abstract,
		 // выбрасываем исключение
		 if (!($router instanceof Zend_Controller_Router_Abstract)) {
			  throw new Exception('Incorrect config file: routes');
		 }

		 return $router;
	}
}

